//
//  ByCoreCacheSqlite3.m
//  beibei_ios
//
//  Created by hebidu on 16/4/16.
//  Copyright © 2016年 hebidu. All rights reserved.
//

#import "ByCoreCacheSqlite3.h"
#import "ByCoreDataBase.h"      // 数据库操作
#import "FastCoder.h"           //
#define MAX_EXPIRETIME (NSInteger)(3600 *24 *30) // 最大过期时间（永久保存）

@implementation ByCoreCacheSqlite3
/** 保存缓存 默认永久缓存 */
+ (void)setObjectWithKey:(NSString *)key
                   value:(id)value {
    
    [self setObjectWithKey:key value:value expireTime:MAX_EXPIRETIME]; // 永久缓存
}
/** 保存缓存 可以设置过期时间 */
+ (void)setObjectWithKey:(NSString *)key
                   value:(id)value
              expireTime:(NSInteger)expireTime {
    
    if (value == nil) { // 数据传空，则删除缓存
        [ByCoreDataBase deleteItemWithKey:key];
    } else { // 否则覆盖或新增
        NSDate *now = [NSDate date];
        NSTimeInterval currentTimeStamp = [now timeIntervalSince1970];
        NSInteger updateTime = (int)currentTimeStamp;                 // 当前时间做为缓存时间
        NSString *type = NSStringFromClass([value class]);      // 类型名
        NSData *data = [FastCoder dataWithRootObject:value];    // 数据
        [ByCoreDataBase setItemWithKey:key value:data type:type updateTime:updateTime expireTime:expireTime];
    }
}

/** 获取缓存信息 */
+ (id)getValueWithKey:(NSString *)key {
    
    ByCoreCacheModel *model = [ByCoreDataBase queryWithKey:key]; // 取出对应键名的数据model

    if (model.value == nil) { // 数据库表中不存在该键名的记录
        return nil;
    }
    
    NSDate *now = [NSDate date];
    NSTimeInterval currentTimeStamp = [now timeIntervalSince1970];

    NSInteger expire_time = model.expire_time; // 过期时间（间隔）
    NSInteger update_time = model.update_time; // 缓存时间（时间戳）
    if((expire_time + update_time) < currentTimeStamp) { // 当前时间超过过期时间
        [ByCoreDataBase deleteItemWithKey:key]; // 清除缓存
        return nil;
    } else { // 未过期则取出正确的数据
        NSData *value = model.value;
        id ret = [FastCoder objectWithData:value];
        
        return ret;
    }
    
    
    
}



@end
